package com.demarc.pesquisas.infraestrutura.web.jsf;

public class MaskUtils {

	private MaskUtils() {
		throw new AssertionError("Not instantiable!!");
	}

	public static boolean isCNPJValid(String cnpj) {
		char dig13, dig14;
		int sm, i, r, num, peso;

		// Calculo do 1o. Digito Verificador
		sm = 0;
		peso = 2;
		for (i = 11; i >= 0; i--) {
			// converte o i-ésimo caractere do CNPJ em um número:
			// por exemplo, transforma o caractere '0' no inteiro 0
			// (48 eh a posição de '0' na tabela ASCII)
			num = cnpj.charAt(i) - 48;
			sm = sm + num * peso;
			peso = peso + 1;

			if (peso == 10) {
				peso = 2;
			}
		}

		r = sm % 11;
		if (r == 0 || r == 1) {
			dig13 = '0';
		} else {
			dig13 = (char) (11 - r + 48);
		}

		// Calculo do 2o. Digito Verificador
		sm = 0;
		peso = 2;
		for (i = 12; i >= 0; i--) {
			num = cnpj.charAt(i) - 48;
			sm = sm + num * peso;
			peso = peso + 1;
			if (peso == 10) {
				peso = 2;
			}
		}

		r = sm % 11;
		if (r == 0 || r == 1) {
			dig14 = '0';
		} else {
			dig14 = (char) (11 - r + 48);
		}

		// Verifica se os dígitos calculados conferem com os dígitos
		// informados.
		if ("00000000000000".equalsIgnoreCase(cnpj.trim())
				|| !(dig13 == cnpj.charAt(12) && dig14 == cnpj.charAt(13))) {
			return false;
		}

		return true;
	}
}
